/*
 *   Copyright (c) 2008-2018 SLIBIO <https://github.com/SLIBIO>
 *
 *   Permission is hereby granted, free of charge, to any person obtaining a copy
 *   of this software and associated documentation files (the "Software"), to deal
 *   in the Software without restriction, including without limitation the rights
 *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *   copies of the Software, and to permit persons to whom the Software is
 *   furnished to do so, subject to the following conditions:
 *
 *   The above copyright notice and this permission notice shall be included in
 *   all copies or substantial portions of the Software.
 *
 *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 *   THE SOFTWARE.
 */

package slib.platform.android.ui;

import android.graphics.BitmapShader;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.RadialGradient;
import android.graphics.Shader;

public class UiBrush {

	public int style;
	public static final int STYLE_SOLID = 0;
	public static final int STYLE_LINEAR_GRADIENT = 1;
	public static final int STYLE_RADIAL_GRADIENT = 2;
	public static final int STYLE_TEXTURE = 3;

	// Solid Brush
	public int color = 0xFFFFFFFF;

	// Gradient Brush
	public float x;
	public float y;
	public float x2;
	public float y2;
	public float radius;
	public int[] colors;
	public float[] locations;

	// Texture Brush
	public UiBitmap pattern;
	
	public void applyPaint(Paint paint, int alpha) {
		paint.setStyle(Paint.Style.FILL);
		paint.setColor(Graphics.applyAlphaToColor(color, alpha));
		if (style != STYLE_SOLID) {
			if (style == STYLE_LINEAR_GRADIENT) {
				if (alpha < 255) {
					int[] c = new int[colors.length];
					for (int i = 0; i < c.length; i++) {
						c[i] = Graphics.applyAlphaToColor(colors[i], alpha);
					}
					paint.setShader(new LinearGradient(x, y, x2, y2, c, locations, Shader.TileMode.CLAMP));
				} else {
					paint.setShader(new LinearGradient(x, y, x2, y2, colors, locations, Shader.TileMode.CLAMP));
				}
			} else if (style == STYLE_RADIAL_GRADIENT) {
				if (alpha < 255) {
					int[] c = new int[colors.length];
					for (int i = 0; i < c.length; i++) {
						c[i] = Graphics.applyAlphaToColor(colors[i], alpha);
					}
					paint.setShader(new RadialGradient(x, y, radius, c, locations, Shader.TileMode.CLAMP));
				} else {
					paint.setShader(new RadialGradient(x, y, radius, colors, locations, Shader.TileMode.CLAMP));
				}
			} else if (style == STYLE_TEXTURE) {
				if (pattern.bitmap != null) {
					paint.setShader(new BitmapShader(pattern.bitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT));
				}
			}
		}
	}
}
